#include "../include/show_time.h"
 
void show_font(struct LcdDevice *lcd, char *buf_time)
{
    // 打开字体
    font *f = fontLoad(FONT_PATH);
 
    // 字体大小的设置，30表示字体大小，数字越大字体越大
    fontSetSize(f, 30);
 
    // 创建一个画板（点阵图）宽是200个像素，高是50个像素，getColor后面三个十进制数表示颜色BGR
    bitmap *bm_time = createBitmapWithInit(220, 32, 4, getColor(0, 215, 215, 215)); 
 
    // 将字体写到点阵图上 0,0表示汉字在画板的左上角显示
    fontPrint(f, bm_time, 0, 0, buf_time, getColor(0, 0, 0, 0), 0);
 
    // 把字体框输出到LCD屏幕上  参数0,0表示画板显示的坐标位置
    show_font_to_lcd(lcd->mp, 310, 0, bm_time);
 
    // 关闭字体，关闭画板
    fontUnload(f);
    destroyBitmap(bm_time);
}
 
// 初始化Lcd
struct LcdDevice *init_lcd(const char *device)
{
    // 申请空间
    struct LcdDevice *lcd = malloc(sizeof(struct LcdDevice));
    if (lcd == NULL)
    {
        return NULL;
    }
 
    // 1打开设备
    lcd->fd = open(device, O_RDWR);
    if (lcd->fd < 0)
    {
        perror("open lcd fail");
        free(lcd);
        return NULL;
    }
    // 映射
    lcd->mp = mmap(NULL, LCD_H * LCD_W * 4, PROT_READ | PROT_WRITE, MAP_SHARED, lcd->fd, 0);
    return lcd;
}
 
// 获取时间
char *get_time()
{
    time_t rawtime;
    struct tm *timeinfo;
    char *buffer = (char *)malloc(sizeof(char) * 80);
    time(&rawtime);
    timeinfo = localtime(&rawtime);
 
    // 格式化时间到 buffer 字符串
    snprintf(buffer, 80, "%04d-%02d-%02d %02d:%02d:%02d",
             timeinfo->tm_year + 1910, // 年份是从1900年开始计算的，所以要加1900
             timeinfo->tm_mon + 1,     // 月份是从0开始的，所以要加1
             timeinfo->tm_mday,        // 日期
             timeinfo->tm_hour,        // 小时
             timeinfo->tm_min,         // 分钟
             timeinfo->tm_sec);        // 秒
    
    return buffer;
}
 
void* show_time(void *arg)
{
    // 初始化Lcd
    struct LcdDevice *lcd = init_lcd(LCD_DEV_PATH);
    if (lcd == (struct LcdDevice *)NULL)
    {
        printf("初始化LCD失败！\n");
        return NULL;
    }

    while (1)
    {
        char *buf_time = get_time();
        show_font(lcd, buf_time);
    }
}